package com.fantaike.algorithm.sort;

import java.util.concurrent.CompletableFuture;

/**
 * 选择排序：主要是位置的选择，第一个数据假设为最小值，依次和后面的数据进行比较，如果有比他小的就将索引进行交换，第一次比较完毕
 * 后，我们能够得到最小数据所在位置的索引，我们将二者的数据进行交换即可。以后依次比较，代码如下
 * @author jishushen
 * @create 2021-07-31 13:40
 */
public class Selection {
    /**
     * @Description: 选择排序
     * @param array
     * @Date: 2021/7/31 13:49
     * @Author: xuepeng
     * @Return
     * @Throws
     */
    public static void sort(Comparable[] array){
        for (int i = 0; i < array.length - 1; i++) {
            //定义一个变量记录最小元素的索引，默认为参与选择排序的第一个元素所在位置
            int mainxIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                //需要比较最小索引处的值和j处的值
                if (greater(array[mainxIndex],array[j])){
                    mainxIndex = j;
                }
            }
            //内层for循环完成后，说明了minIndex索引所对应的值是这一次选择排序比较中的最小值。
            exch(array,i,mainxIndex);
        }
    }

    /**
     * @Description: v和w进行比较，如果v比w大就返回true
     * @param v
     * @param w
     * @Date: 2021/7/31 13:46
     * @Author: xuepeng
     * @Return
     * @Throws
     */
    public static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w) > 0;
    }

    /**
     * @Description: 索引i处的值和索引j处的值进行交换
     * @param array
     * @param i
     * @param j
     * @Date: 2021/7/31 13:48
     * @Author: xuepeng
     * @Return 
     * @Throws 
     */
    public static void exch(Comparable[] array,int i,int j){
        Comparable temp;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
